package nl.siegmann.epublib.examples;

import java.io.FileOutputStream;

import nl.siegmann.epublib.domain.Author;
import nl.siegmann.epublib.domain.Book;
import nl.siegmann.epublib.domain.InputStreamResource;
import nl.siegmann.epublib.domain.Section;
import nl.siegmann.epublib.epub.EpubWriter;
import nl.siegmann.epublib.service.MediatypeService;

public class Simple1 {
	public static void main(String[] args) {
		try {
			// Create new Book
			Book book = new Book();
	
			// Set the title
			book.getMetadata().addTitle("Epublib test book 1");
			
			// Add an Author
			book.getMetadata().addAuthor(new Author("Joe", "Tester"));
	
			// Set cover image
			book.setCoverImage(new InputStreamResource(Simple1.class.getResourceAsStream("/book1/cover.png"), MediatypeService.PNG));
			
			// Add Chapter 1
			book.addResourceAsSection("Introduction", new InputStreamResource(Simple1.class.getResourceAsStream("/book1/chapter1.html"), MediatypeService.XHTML));
	
			// Add css file
			book.getResources().add(new InputStreamResource(Simple1.class.getResourceAsStream("/book1/book1.css"), "book1.css"));
	
			// Add Chapter 2
			Section chapter2 = book.addResourceAsSection("Second Chapter", new InputStreamResource(Simple1.class.getResourceAsStream("/book1/chapter2.html"), "chapter2.html"));
			
			// Add image used by Chapter 2
			book.getResources().add(new InputStreamResource(Simple1.class.getResourceAsStream("/book1/flowers_320x240.jpg"), "flowers.jpg"));
	
			// Add Chapter2, Section 1
			book.addResourceAsSubSection(chapter2, "Chapter 2, section 1", new InputStreamResource(Simple1.class.getResourceAsStream("/book1/chapter2_1.html"), "chapter2_1.html"));
	
			// Add Chapter 3
			book.addResourceAsSection("Conclusion", new InputStreamResource(Simple1.class.getResourceAsStream("/book1/chapter3.html"), "chapter3.html"));
	
			// Create EpubWriter
			EpubWriter epubWriter = new EpubWriter();
	
			// Write the Book as Epub
			epubWriter.write(book, new FileOutputStream("test1_book1.epub"));
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}
